import { reqShopCart,reqDeleteShop,reqcheackCart } from "@/api"
export default {
    actions: {
        //获取购物车数据
        async getShopCart({ commit }) {
            let result = await reqShopCart()
            if (result.code == 200) {
                commit('CARTLIST', result.data)
            }
        },
        //删除购物车对应的产品
        async DeleteShop({ commit }, skuId) {
            let result = await reqDeleteShop(skuId)
            if (result.code == 200) {
                return 'ok'
            } else {
                return Promise.reject(new Error('faile'))
            }
        },
        // //修改产品的状态
        async CheckCart({ commit }, { skuId, isChecked }) {
            let result = await reqcheackCart(skuId, isChecked)
            if (result.code == 200) {
                return 'ok'
            } else {
                return Promise.reject(new Error('faile'))
            }
        },
        //删除全部勾选的产品
        deleteAllCheckedCart({ dispatch, getters }) {
            let arr = []
            getters.cartList.cartInfoList.forEach(item => {
                //遍历判断购物车内的商品那些被选中，如果被选中则继续派发action删除选中单个商品请求
                if (item.isChecked == 1) {
                    //这里dispatch派发action返回的是一个promise，里面保存了DeleteShop请求的成功或失败值
                    let ps = dispatch('DeleteShop', item.skuId)
                    arr.push(ps)
                }
            })
            //将所有的选中任务判断完返回得到的promise数组通过Promise.all（[]）方法判断数组内的promise是否都成功，如果全部成功则返回true否则返回false
            return Promise.all(arr)
        },
        //修改全部商品的选择状态
        allUpdateChecked({ state, dispatch }, isChecked) {
            let arr = [];
            //获取购物车商品的个数,进行遍历
            state.cartList[0].cartInfoList.forEach(item => {
                //调用修改某一个商品的action【四次】
                let ps = dispatch("CheckCart", { skuId: item.skuId, isChecked });
                arr.push(ps);
            })
            //Promise.all():参数需要的是一个数组【数组里面需要promise】
            //Promise.all()执行一次,返回的是一个Promise对象,Promise对象状态：成功、失败取决于什么?
            //成功、还是失败取决于数组里面的promise状态:四个都成功、返回成功Promise、只要有一个失败、返回Promise失败状态！！！
            return Promise.all(arr);
        },
    },
    mutations: {
        CARTLIST(state, cartList) {
            state.cartList = cartList
        }
    },
    state: {
        cartList: []
    },
    getters: {
        cartList(state) {
            return state.cartList[0] || {}
        }
    },
}